/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package camada.bancodedados.daoimplemente.fornecedor;

import camada.bancodedados.conexao.Conexao;
import camada.negocio.dao.fornecedor.FornecedorDAO;
import com.mysql.jdbc.PreparedStatement;
import eloma.classe.Fornecedor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import utilitarios.Exceptions;

/**
 *
 * @author Icaro
 */
public class FornecedorDAOImpl implements FornecedorDAO {

    Exceptions exception = new Exceptions();

    @Override
    //<editor-fold desc="inserirFornecedor">
    public void inserirFornecedor(Fornecedor forn) {
        PreparedStatement pstm = null;
        try {
            final String SQL_INSERIR_FORNECEDOR
                    = "insert into fornecedor(nome,contato,endereco,cidade,cep,bairro,estado,telefone,email,celular,cnpj,escricaoestadual)values(?,?,?,?,?,?,?,?,?,?,?,?)";
            pstm = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_INSERIR_FORNECEDOR);
            pstm.setString(1, forn.getNome());
            pstm.setString(2, forn.getContato());
            pstm.setString(3, forn.getEndereco());
            pstm.setString(4, forn.getCidade());
            pstm.setLong(5, forn.getCep());
            pstm.setString(6, forn.getBairro());
            pstm.setString(7, forn.getEstado());
            pstm.setLong(8, forn.getTelefone());
            pstm.setString(9, forn.getEmail());
            pstm.setLong(10, forn.getCelular());
            pstm.setLong(11, forn.getCnp());
            pstm.setLong(12, forn.getEscricaoestadual());
            pstm.executeUpdate();
        } catch (SQLException e) {
            exception.Exceptions(e.getMessage().toString(), "FornecedorDAOImpl - inserirFornecedor");
        }
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="atualizarFornecedor">
    public void atualizarFornecedor(Fornecedor forn) {
        PreparedStatement pstm = null;
        try {
            final String SQL_UPDATE
                    = "UPDATE fornecedor SET nome = ?,contato = ?,endereco = ?,cidade = ?,cep = ?,bairro = ?,estado = ?,telefone = ?,email = ?,celular = ?,cnpj = ?,escricaoestadual = ? where idFornecedor = ? ";
            pstm = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_UPDATE);
            pstm.setString(1, forn.getNome());
            pstm.setString(2, forn.getContato());
            pstm.setString(3, forn.getEndereco());
            pstm.setString(4, forn.getCidade());
            pstm.setLong(5, forn.getCep());
            pstm.setString(6, forn.getBairro());
            pstm.setString(7, forn.getEstado());
            pstm.setLong(8, forn.getTelefone());
            pstm.setString(9, forn.getEmail());
            pstm.setLong(10, forn.getCelular());
            pstm.setLong(11, forn.getCnp());
            pstm.setLong(12, forn.getEscricaoestadual());
            pstm.setInt(13, forn.getIdFornecedor());
            pstm.executeUpdate();
        } catch (SQLException e) {
            exception.Exceptions(e.getMessage().toString(), "FornecedorDAOImpl - atualizarFornecedor");
        }
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="removerFornecedor">
    public void removerFornecedor(int idFornecedor) {
        PreparedStatement pstm = null;
        try {
            final String SQL_DELETE = "delete from fornecedor where idFornecedor = ?";
            pstm = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_DELETE);
            pstm.setInt(1, idFornecedor);
            pstm.executeUpdate();
        } catch (SQLException e) {
            exception.Exceptions(e.getMessage().toString(), "FornecedorDAOImpl - removerFornecedor");
        }
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="selecionarTodosFornecedor">
    public List<Fornecedor> selecionarTodosFornecedor() throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String SELECT_FORNECEDOR = "Select * from Fornecedor";
        try {
            stmt = (PreparedStatement) Conexao.getCon().prepareStatement(SELECT_FORNECEDOR);
            rs = stmt.executeQuery();
            return carregarVariosResultados(rs);
        } catch (SQLException sqle) {
            exception.Exceptions(sqle.getMessage().toString(), "FornecedorDAOImpl - selecionarTodosFornecedor");
            throw new Exception(sqle);
        } catch (Exception e) {
            exception.Exceptions(e.getMessage().toString(), "FornecedorDAOImpl - selecionarTodosFornecedor");
            throw new Exception(e);
        } finally {
        }
    }
    //</editor-fold>

    //<editor-fold desc="Metódos para carregar listas">
    public List<Fornecedor> carregarVariosResultados(ResultSet rs) throws SQLException {
        List<Fornecedor> resultList = new ArrayList<Fornecedor>();
        while (rs.next()) {
            Fornecedor dto = new Fornecedor();
            carregarVO(dto, rs);
            resultList.add(dto);
        }
        return resultList;
    }

    private Fornecedor carregarSimpleResultado(ResultSet rs) throws SQLException {
        if (rs.next()) {
            Fornecedor dto = new Fornecedor();
            carregarVO(dto, rs);
            return dto;
        } else {
            return null;
        }
    }

    private void carregarVO(Fornecedor dto, ResultSet rs) throws SQLException {
        dto.setIdFornecedor(rs.getInt("IdFornecedor"));
        dto.setNome(rs.getString("nome"));
        dto.setContato(rs.getString("contato"));
        dto.setEndereco(rs.getString("endereco"));
        dto.setCidade(rs.getString("cidade"));
        dto.setCep(rs.getLong("cep"));
        dto.setBairro(rs.getString("bairro"));
        dto.setEstado(rs.getString("estado"));
        dto.setTelefone(rs.getLong("telefone"));
        dto.setEmail(rs.getString("email"));
        dto.setCelular(rs.getLong("celular"));
        dto.setCnp(rs.getLong("cnpj"));
        dto.setEscricaoestadual(rs.getLong("escricaoestadual"));
    }
    //</editor-fold>
}
